#!/bin/bash
#
# Copyright 2020 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# start solr in the foreground
set -e

if [[ "$VERBOSE" == "yes" ]]; then
    set -x
fi

EXTRA_ARGS=()

# Allow easy setting of the OOM behaviour
# Test with: docker run -p 8983:8983 -it -e OOM=script -e SOLR_JAVA_MEM="-Xms25m -Xmx25m" solr
if [[ -z "${OOM:-}" ]]; then
  OOM='none'
fi
case "$OOM" in
  'script')
    EXTRA_ARGS+=(-a '-XX:OnOutOfMemoryError=/opt/docker-solr/scripts/oom_solr.sh')
    ;;
  'exit')
    # recommended
    EXTRA_ARGS+=(-a '-XX:+ExitOnOutOfMemoryError')
    ;;
  'crash')
    EXTRA_ARGS+=(-a '-XX:+CrashOnOutOfMemoryError')
    ;;
  'none'|'')
    ;;
  *)
   echo "Unsupported value in OOM=$OOM"
   exit 1
esac

echo "Starting Solr $SOLR_VERSION"
# determine TINI default. If it is already set, assume the user knows what they want
if [[ -z "${TINI:-}" ]]; then
  if [[ "$$" == 1 ]]; then
    # Default to running tini, so we can run with an OOM script and have 'kill -9' work
    TINI=yes
  else
    # Presumably we're already running under tini through 'docker --init', in which case we
    # don't need to run it twice.
    # It's also possible that we're run from a wrapper script without exec,
    # in which case running tini would not be ideal either.
    TINI=no
  fi
fi
if [[ "$TINI" == yes ]]; then
  exec /usr/bin/tini -- solr -f "$@" "${EXTRA_ARGS[@]}"
elif [[ "$TINI" == no ]]; then
  exec solr -f "$@" "${EXTRA_ARGS[@]}"
else
  echo "invalid value TINI=$TINI"
  exit 1
fi
